Public Sub RunScript()

'  Starting Access Basic DAO Session...

  Dim ScriptWorkspace As Workspace
  Dim ScriptDatabase As Database
  Dim ScriptTableDef As TableDef
  Dim ScriptQueryDef As QueryDef
  Dim ScriptIndex As Index
  Dim ScriptField As Field
  Dim ScriptRelation As Relation

  Set ScriptWorkspace = DBEngine.Workspaces(0)

' Enter in the correct database path here.
  Set ScriptDatabase = ScriptWorkspace.OpenDatabase("C:\Wrox\VB MTS\PP.mdb")

' CREATE TABLE "PPAttribute"
  Set ScriptTableDef = ScriptDatabase.CreateTableDef("PPAttribute")
  Set ScriptField = ScriptTableDef.CreateField("AttributeID", DB_LONG)
  ScriptField.Attributes = ScriptField.Attributes + DB_AUTOINCRFIELD
  ScriptTableDef.Fields.Append ScriptField
  Set ScriptField = ScriptTableDef.CreateField("AttributeName", DB_TEXT, 50)
  ScriptField.Required = True
  ScriptTableDef.Fields.Append ScriptField
  Set ScriptField = ScriptTableDef.CreateField("AttributeValue", DB_TEXT, 50)
  ScriptTableDef.Fields.Append ScriptField
  ScriptDatabase.TableDefs.Append ScriptTableDef

' CREATE INDEX "PrimaryKey"
  Set ScriptTableDef = ScriptDatabase.TableDefs("PPAttribute")
  Set ScriptIndex = ScriptTableDef.CreateIndex("PrimaryKey")
  Set ScriptField = ScriptIndex.CreateField("AttributeID")
  ScriptIndex.Fields.Append ScriptField
  ScriptIndex.Primary = True
  ScriptIndex.Clustered = True
  ScriptTableDef.Indexes.Append ScriptIndex

' CREATE INDEX "AlternateKey"
  Set ScriptTableDef = ScriptDatabase.TableDefs("PPAttribute")
  Set ScriptIndex = ScriptTableDef.CreateIndex("AlternateKey")
  Set ScriptField = ScriptIndex.CreateField("AttributeName")
  ScriptIndex.Fields.Append ScriptField
  Set ScriptField = ScriptIndex.CreateField("AttributeValue")
  ScriptIndex.Fields.Append ScriptField
  ScriptIndex.Unique = True
  ScriptTableDef.Indexes.Append ScriptIndex

' CREATE TABLE "PPSystem"
  Set ScriptTableDef = ScriptDatabase.CreateTableDef("PPSystem")
  Set ScriptField = ScriptTableDef.CreateField("SystemID", DB_LONG)
  ScriptField.Attributes = ScriptField.Attributes + DB_AUTOINCRFIELD
  ScriptTableDef.Fields.Append ScriptField
  Set ScriptField = ScriptTableDef.CreateField("SystemName", DB_TEXT, 50)
  ScriptField.Required = True
  ScriptTableDef.Fields.Append ScriptField
  ScriptDatabase.TableDefs.Append ScriptTableDef

' CREATE INDEX "PrimaryKey"
  Set ScriptTableDef = ScriptDatabase.TableDefs("PPSystem")
  Set ScriptIndex = ScriptTableDef.CreateIndex("PrimaryKey")
  Set ScriptField = ScriptIndex.CreateField("SystemID")
  ScriptIndex.Fields.Append ScriptField
  ScriptIndex.Primary = True
  ScriptIndex.Clustered = True
  ScriptTableDef.Indexes.Append ScriptIndex

' CREATE INDEX "Name"

  Set ScriptTableDef = ScriptDatabase.TableDefs("PPSystem")
  Set ScriptIndex = ScriptTableDef.CreateIndex("Name")
  Set ScriptField = ScriptIndex.CreateField("SystemName")
  ScriptIndex.Fields.Append ScriptField
  ScriptIndex.Unique = True
  ScriptTableDef.Indexes.Append ScriptIndex

' CREATE TABLE "PPUser"
  Set ScriptTableDef = ScriptDatabase.CreateTableDef("PPUser")
  Set ScriptField = ScriptTableDef.CreateField("UserID", DB_LONG)
  ScriptField.Attributes = ScriptField.Attributes + DB_AUTOINCRFIELD
  ScriptTableDef.Fields.Append ScriptField
  Set ScriptField = ScriptTableDef.CreateField("UserName", DB_TEXT, 50)
  ScriptField.Required = True
  ScriptTableDef.Fields.Append ScriptField
  Set ScriptField = ScriptTableDef.CreateField("UserPassword", DB_TEXT, 50)
  ScriptField.Required = True
  ScriptTableDef.Fields.Append ScriptField
  Set ScriptField = ScriptTableDef.CreateField("UserEMail", DB_TEXT, 50)
  ScriptField.AllowZeroLength = True
  ScriptTableDef.Fields.Append ScriptField
  ScriptDatabase.TableDefs.Append ScriptTableDef

' CREATE INDEX "PrimaryKey"

  Set ScriptTableDef = ScriptDatabase.TableDefs("PPUser")
  Set ScriptIndex = ScriptTableDef.CreateIndex("PrimaryKey")
  Set ScriptField = ScriptIndex.CreateField("UserID")
  ScriptIndex.Fields.Append ScriptField
  ScriptIndex.Primary = True
  ScriptIndex.Clustered = True
  ScriptTableDef.Indexes.Append ScriptIndex

' CREATE INDEX "AlternateKey"
  Set ScriptTableDef = ScriptDatabase.TableDefs("PPUser")
  Set ScriptIndex = ScriptTableDef.CreateIndex("AlternateKey")
  Set ScriptField = ScriptIndex.CreateField("UserName")
  ScriptIndex.Fields.Append ScriptField
  Set ScriptField = ScriptIndex.CreateField("UserPassword")
  ScriptIndex.Fields.Append ScriptField
  ScriptIndex.Unique = True
  ScriptTableDef.Indexes.Append ScriptIndex

' CREATE TABLE "PPSystemUser"
  Set ScriptTableDef = ScriptDatabase.CreateTableDef("PPSystemUser")
  Set ScriptField = ScriptTableDef.CreateField("UserID", DB_LONG)
  ScriptField.Required = True
  ScriptTableDef.Fields.Append ScriptField
  Set ScriptField = ScriptTableDef.CreateField("SystemID", DB_LONG)
  ScriptField.Required = True
  ScriptTableDef.Fields.Append ScriptField
  ScriptDatabase.TableDefs.Append ScriptTableDef

' CREATE INDEX "PrimaryKey"
  Set ScriptTableDef = ScriptDatabase.TableDefs("PPSystemUser")
  Set ScriptIndex = ScriptTableDef.CreateIndex("PrimaryKey")
  Set ScriptField = ScriptIndex.CreateField("UserID")
  ScriptIndex.Fields.Append ScriptField
  Set ScriptField = ScriptIndex.CreateField("SystemID")
  ScriptIndex.Fields.Append ScriptField
  ScriptIndex.Primary = True
  ScriptIndex.Clustered = True
  ScriptTableDef.Indexes.Append ScriptIndex

' CREATE TABLE "PPSystemUserAttribute"
  Set ScriptTableDef = ScriptDatabase.CreateTableDef("PPSystemUserAttribute")
  Set ScriptField = ScriptTableDef.CreateField("UserID", DB_LONG)
  ScriptField.Required = True
  ScriptTableDef.Fields.Append ScriptField
  Set ScriptField = ScriptTableDef.CreateField("SystemID", DB_LONG)
  ScriptField.Required = True
  ScriptTableDef.Fields.Append ScriptField
  Set ScriptField = ScriptTableDef.CreateField("AttributeID", DB_LONG)
  ScriptField.Required = True
  ScriptTableDef.Fields.Append ScriptField
  ScriptDatabase.TableDefs.Append ScriptTableDef

' CREATE INDEX "PrimaryKey"
  Set ScriptTableDef = ScriptDatabase.TableDefs("PPSystemUserAttribute")
  Set ScriptIndex = ScriptTableDef.CreateIndex("PrimaryKey")
  Set ScriptField = ScriptIndex.CreateField("UserID")
  ScriptIndex.Fields.Append ScriptField
  Set ScriptField = ScriptIndex.CreateField("SystemID")
  ScriptIndex.Fields.Append ScriptField
  Set ScriptField = ScriptIndex.CreateField("AttributeID")
  ScriptIndex.Fields.Append ScriptField
  ScriptIndex.Primary = True
  ScriptIndex.Clustered = True
  ScriptTableDef.Indexes.Append ScriptIndex

' CREATE RELATIONSHIP "R/3"
  Set ScriptRelation = ScriptDatabase.CreateRelation("R/3", "PPUser", _
                                                     "PPSystemUser")
  Set ScriptField = ScriptRelation.CreateField("UserID")
  ScriptField.ForeignName = "UserID"
  ScriptRelation.Fields.Append ScriptField
  ScriptDatabase.Relations.Append ScriptRelation

'  CREATE RELATIONSHIP "R/4"
  Set ScriptRelation = ScriptDatabase.CreateRelation("R/4", "PPSystem", _
                                                     "PPSystemUser")
  Set ScriptField = ScriptRelation.CreateField("SystemID")
  ScriptField.ForeignName = "SystemID"
  ScriptRelation.Fields.Append ScriptField
  ScriptDatabase.Relations.Append ScriptRelation

' CREATE RELATIONSHIP "PPSystemUserPPSystemUserAttribute"
  Set ScriptRelation = _ 
      ScriptDatabase.CreateRelation("PPSystemUserPPSystemUserAttribute", _
                                    "PPSystemUser", "PPSystemUserAttribute")
  Set ScriptField = ScriptRelation.CreateField("UserID")
  ScriptField.ForeignName = "UserID"
  ScriptRelation.Fields.Append ScriptField
  Set ScriptField = ScriptRelation.CreateField("SystemID")
  ScriptField.ForeignName = "SystemID"
  ScriptRelation.Fields.Append ScriptField
  ScriptRelation.Attributes = ScriptRelation.Attributes + DB_RELATIONDELETECASCADE
  ScriptDatabase.Relations.Append ScriptRelation

' CREATE RELATIONSHIP "R/18"
  Set ScriptRelation = ScriptDatabase.CreateRelation("R/18", "PPAttribute", _
                                                     "PPSystemUserAttribute")
  Set ScriptField = ScriptRelation.CreateField("AttributeID")
  ScriptField.ForeignName = "AttributeID"
  ScriptRelation.Fields.Append ScriptField
  ScriptDatabase.Relations.Append ScriptRelation
  ScriptDatabase.Close
  ScriptWorkspace.Close

' Terminating Access Basic DAO Session...

  MsgBox "Table creation complete!"

End Sub
